package grape.sequence.service.config.po;

import grape.common.service.common.IDictGroup;
import grape.common.service.common.IDictItem;
import grape.common.service.po.NormalBasePo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.Version;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 序列生成配置表
 * </p>
 *
 * @author yangwei
 * @since 2020-08-20
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sequence_config")
public class Config extends NormalBasePo<Config> {

    private static final long serialVersionUID = 1L;
    /**
     * 序列生成周期字典组编码
     */
    public enum PeriodUnitDictGroup implements IDictGroup {
        period_unit_group;

        @Override
        public String groupCode() {
            return this.name();
        }}

    /**
     * 序列生成周期字典项编码
     */
    public enum PeriodUnitDictItem implements IDictItem {
        period_unit_year,
        period_unit_month,
        period_unit_week,
        period_unit_day;

        @Override
        public String itemCode() {
            return this.name();
        }
    }
    /**
     * 编码
     */
    private String code;

    /**
     * 名称
     */
    private String name;

    /**
     * 周期
     */
    private Integer period;

    /**
     * 周期单位
     */
    private String periodUnitDictId;

    /**
     * 周期计算是否从第一次生成序列的时间开始计算，否则从配置添加的时间计算
     */
    private Boolean isPeriodFormFirstGenerateAt;

    /**
     * 初始值
     */
    private Integer startValue;

    /**
     * 步长
     */
    private Integer stepValue;

    /**
     * 最小长度
     */
    private Integer minLength;

    /**
     * 最小长度，不够时，前面补占位字符
     */
    private String prepend;

    /**
     * 前缀
     */
    private String prefix;

    /**
     * 前缀是否拼接周期，如：BH 2020 100000
     */
    private Boolean isPrefixWithPeriod;

    /**
     * 第一次生成的时间戳
     */
    private Long firstGenerateAt;

    /**
     * 备注
     */
    private String remark;


    @Override
    protected Serializable pkVal() {
        return null;
    }

}
